/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"738A19FB-4812-49D3-A54B-D86705D34674",variableType:8}
 */
var fPorcRetIIBB = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"4BE8913E-4606-4D1D-AEDE-877A296FBAC5",variableType:8}
 */
var fPorcRetIva = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"04B96B4E-1C88-43FA-B7DF-094ADF38A474",variableType:8}
 */
var fPorcRetGanancias = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E2018E66-5660-4769-81DE-E2C39DB8506B",variableType:4}
 */
var fTipoOrden = 1;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"504C6497-8300-4D8E-B1D2-5D0BE4371EA5",variableType:8}
 */
var fTotalPago = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"AFC60D01-6EEF-4F2D-B1B5-C9B0EC0809FD",variableType:8}
 */
var f_neto_reten = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"AE3085BC-0AE9-4942-BD7D-B16FD5A6D907",variableType:4}
 */
var fPagoTerceros = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E8A27CD1-1229-4E95-88CD-CF4F4075D5DE",variableType:4}
 */
var es_anticipo = 0;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"27732692-FEC4-4B13-B20F-A166BED2E0A7",variableType:4}
 */
var es_preview = 0;

/**
 *
 * @properties={typeid:24,uuid:"25C2AF23-5901-41C2-ADE0-64F2C91F20C1"}
 */
function agregar_renglon()
{ //  dar alta de un renglon en op_detalle 
	if(proveedor_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe informar Proveedor",'OK')
		elements.proveedor_id.requestFocus();
	}
	else
	{
		op_cabecera_to_op_detalle.newRecord(false)    
	}
	elements.confirmar.enabled = false;
}

/**
 *
 * @properties={typeid:24,uuid:"E19FF56D-9160-4C89-B797-B951133B189A"}
 */
function cancelar() 
{
	databaseManager.revertEditedRecords()
	Iniciar();
}

/**
 *
 * @properties={typeid:24,uuid:"34119DC7-9B0B-4BEA-9F23-FEC48DFE5997"}
 * @AllowToRunInFind
 */
function confirmar() 
{
	if (globals.gtotal_valores == 0 )
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe ingresar valores",'OK')
		return false; 
	}
	if (globals.zparam_usa_proyecto == 1 && proyecto_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe ingresar proyecto",'OK')
		return false; 
	}
	var estado = validar_fecha_pago();
	if (estado == false)
		return false;

	var dife_abs
	if (fTipoOrden == 1)
	{
		dife_abs = Math.abs(globals.gtotal_valores + globals.gtotal_retenciones - globals.gtotal_comprob)
		if (dife_abs > globals.zparam_opago_tolerancia)
		{
			globals.DIALOGS.showWarningDialog('Aviso','La diferencia entre el pago y los comprobantes no está dentro de la tolerancia','OK')
			return false
		}
	}
	else
	{
		dife_abs = Math.abs(globals.gtotal_valores + globals.gtotal_retenciones - fTotalPago)
		if (dife_abs > 0.009)
		{
			globals.DIALOGS.showWarningDialog('Aviso','El total del pago no coincide con la suma de valores y retenciones','OK')
			return false
		}
		if (fTipoOrden == 2 && globals.gtotal_comprob != 0)
		{
			globals.DIALOGS.showWarningDialog('Aviso','No puede cargar comprobantes en un anticipo','OK')
			return false
		}
		else
		{
			if (fTipoOrden == 3 && fTotalPago < globals.gtotal_comprob)
			{
				globals.DIALOGS.showWarningDialog('Aviso','El total del pago debe ser mayor al total de los comprobantes','OK')
				return false
			}
		}
	}
	
	//// buscar numeracion de orden de pago   codigo=4  fijo???
	var fs_nro_op = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'numeracion_pr')
	databaseManager.refreshRecordFromDatabase(fs_nro_op,-1) //29/11/2010 no refrescaba y daba error de OP duplicada
	fs_nro_op.find()
	fs_nro_op.sucursal			= sucursal
	fs_nro_op.letra				= letra
	fs_nro_op.cod_comprobante	= globals.zparam_codigo_opago
	var found = fs_nro_op.search()
	if (found != 1)
	{	
		globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Tipo de comprobante incorrectos al buscar numeración','OK')
		return false;
	}
	else
	{	
		fs_nro_op.setSelectedIndex(1)
		var nro_aux = fs_nro_op.ultimo_numero + 1  
		globals.duplicacion_op_cabecera(letra,sucursal,nro_aux,globals.zparam_codigo_opago) // TODO q devuelva un valor y no sobre la variable global
		if (globals.gfilas != 0)  // si es cero, la factura no existe
		{ // ya existe , lo rechaza
			globals.DIALOGS.showWarningDialog('Aviso','Ya existe Pago a proveedor ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_aux,'00000000'),'OK')
			return false;
		}
	}
	fs_nro_op.ultimo_numero = nro_aux
	nro_comprobante			= nro_aux
	codigo_movimiento		= globals.zparam_codigo_opago
	chofer_id				= 0
	if (fTipoOrden != 1)
	{
		importe = fTotalPago;
	}
	else
	{
		importe = globals.gtotal_valores + globals.gtotal_retenciones
	}
	importe_en_letras 	= globals.nro_a_letra(importe); 
	total_valores		= globals.gtotal_valores;       
	total_retenciones	= globals.gtotal_retenciones; 
	total_comprobantes	= globals.gtotal_comprob ;  
 
	//// grabar el pago en ctacte  // desde la relacion op_cabecera-proveedor + proveedor-ctacte
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.newRecord()      
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_mov		= fecha
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.nro_factura		= nro_comprobante
	if (fPagoTerceros == 0)
	{
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cod_mov = 4 // pago común
	}
	else
	{
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cod_mov = 16 // pago de serv terceros - no retiene ganancias
	}
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.sucursal	= sucursal
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.letra		= letra
	if (fTipoOrden == 1)
	{
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0.00	
	}
	else
	{
		if (fTipoOrden == 2)
		{
			op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = total_valores
		}
		else
		{
			var $dif_saldo = total_valores - total_comprobantes
			if ($dif_saldo < 0)
			{
				op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0
				$dif_saldo = Math.abs($dif_saldo)
			}
			else
			{
				op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = $dif_saldo
				$dif_saldo = 0
			}
		}
	}
	// la provincia se debe tomar de la tabla de ciudades= no está en proveedores (para Logistica)
	// si tiene provincia cargada en el proveedor se toma esa (para otros)
	if (op_cabecera_to_proveedor.extranjero != 1)
	{
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provincia_id = op_cabecera_to_proveedor.provincia_id
		var $provincia = op_cabecera_to_proveedor.provincia_id
	}
	
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.importe 		= total_valores
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.neto			= f_neto_reten;
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva				= 0 
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva_porc		= 0
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cond_pago_id	= 0
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.concepto		= concepto
  
	ctacte_pr_id = op_cabecera_to_proveedor.proveedor_to_ctacte_pr.ctacte_pr_id
				
	////restar al saldo el importe del pago de cada comprobante y desmarcar ctacte
	var $cant = op_cabecera_to_op_detalle_comprob.getSize()
	for (var i = 1 ; i <= $cant ; i++)
	{
     	var $rcd = op_cabecera_to_op_detalle_comprob.getRecord(i);
     	if ($rcd.op_detalle_comprob_to_ctacte_pr.marcado_ctacte == 1)
     	{
     		$rcd.op_detalle_comprob_to_ctacte_pr.marcado_ctacte = 0        
     		$rcd.op_detalle_comprob_to_ctacte_pr.saldo = $rcd.op_detalle_comprob_to_ctacte_pr.saldo - $rcd.importe  
     	} 
     }

     //// grabar cyb  por cada detalle  y cheques  
	var $cant = op_cabecera_to_op_detalle.getSize() // ver cuantos hay
	for (var i = 1 ; i <= $cant ; i++)
	{
		//// grabar cheques    
		op_cabecera_to_op_detalle.setSelectedIndex(i)
		if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1)	
		{// es cheque
			if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_propio == 1)	
			{// es propio	
				var $cheque = op_cabecera_to_op_detalle.op_detalle_id_to_cheques
				op_cabecera_to_op_detalle.op_detalle_id_to_cheques.newRecord()
			
				$cheque.banco_id			= op_cabecera_to_op_detalle.banco_id 
				$cheque.banco_sucursal		= op_cabecera_to_op_detalle.banco_sucursal
				$cheque.boleta_dep			= null
				$cheque.cheque_nro			= op_cabecera_to_op_detalle.cheque_nro
				$cheque.cuentas_cyb_id		= op_cabecera_to_op_detalle.cuentas_cyb_id
				$cheque.estado				= globals.zconf_chq_emitido		
				$cheque.fecha_emision		= op_cabecera_to_op_detalle.fecha_emision_chq
				$cheque.fecha_entrega		= fecha
				$cheque.fecha_pago			= op_cabecera_to_op_detalle.fecha_pago
				$cheque.importe				= op_cabecera_to_op_detalle.importe
				$cheque.lugar_emision		= op_cabecera_to_op_detalle.lugar_emision
				$cheque.marca_acredit		= 0
				$cheque.moneda_id			= op_cabecera_to_op_detalle.moneda_id
				$cheque.titular				= op_cabecera_to_op_detalle.titular
				$cheque.titular_cuit		= op_cabecera_to_op_detalle.titular_cuit
				$cheque.titular_direccion	= op_cabecera_to_op_detalle.titular_direccion
				$cheque.valor_id			= op_cabecera_to_op_detalle.valor_id
				$cheque.concepto			= "Orden Pago: " + nro_comprobante + ' - ' + op_cabecera_to_proveedor.razon_social //13/10/2010
			}// fin es propio
			else
			{// es de terceros  
			//  desmarcar  en cheques el cheque y poner fecha_entrega y estado
				if (op_cabecera_to_op_detalle.op_detalle_to_cheques_id.marcado_cheque == 1)
				{
					op_cabecera_to_op_detalle.op_detalle_to_cheques_id.marcado_cheque 	= 0  // desmarca
			 		op_cabecera_to_op_detalle.op_detalle_to_cheques_id.fecha_entrega	= fecha // entregado 
					op_cabecera_to_op_detalle.op_detalle_to_cheques_id.estado			= globals.zconf_chq_entregado_pago
				}
			}// fin es de terceros
	    }// fin es cheque
		
	    //// grabar movim_cyb para todos los valores
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.newRecord();
		if(op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1)
		{//es cheque
			if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_propio == 1) //es propio
				op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cheque_id = op_cabecera_to_op_detalle.op_detalle_id_to_cheques.cheque_id; //??? comprobar  //13/04/2010 este si funciona??????????
			else // es terceros
			{
				op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cheque_id = op_cabecera_to_op_detalle.op_detalle_to_cheques_id.cheque_id; //01/07/2010
			}
		}
		else
		{// es efectivo
			op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cheque_id = null;	
		}
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cod_movim			= globals.zconf_cyb_cod_movim_egreso;     //1=Ingreso 2=Egreso ver solucion valuelist
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cuentas_cyb_id	= op_cabecera_to_op_detalle.cuentas_cyb_id;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.empresa_id		= proveedor_id;   // cabecera
		
		//es cheque propio diferido o es una transferencia o se paga con tarjeta propia
		if ((op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1 && op_cabecera_to_op_detalle.op_detalle_to_valores.es_propio == 1 && op_cabecera_to_op_detalle.op_detalle_to_valores.es_ch_difer == 1) 
				|| (op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 0 && op_cabecera_to_op_detalle.op_detalle_to_valores.usa_cta_bco == 1)
				|| op_cabecera_to_op_detalle.op_detalle_to_valores.es_tarjeta == 1)
			op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.fecha_movim = op_cabecera_to_op_detalle.fecha_pago;         // cabecera
		else
			op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.fecha_movim = fecha;         // cabecera
			
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.importe				= op_cabecera_to_op_detalle.importe;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.imputacion_id			= globals.zconf_cyb_imputacion_pago_proveed; // 1=cobranza de clientes 2= Pago a proveedores tabla cod_imput
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.valor_id				= op_cabecera_to_op_detalle.valor_id;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.concepto				= "Orden Pago: " + nro_comprobante + ' - ' + op_cabecera_to_proveedor.razon_social //21/04/2010
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.marca_conciliacion	= 0
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.fecha_conciliacion	= null
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.referencia			= ''
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.apertura_id 			= op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.apertura_id;
		if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1 || op_cabecera_to_op_detalle.op_detalle_to_valores.usa_cta_bco == 1)
		 	op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.referencia = op_cabecera_to_op_detalle.cheque_nro;
		
		//// CALCULA EL SALDO DE LA CAJA ///
		if (op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.cuentas_tipo == 0) // es cuenta caja
		{
			if(op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1) 
			{// es cheque 
				if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_propio != 1) //es terceros
					op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.cuentas_cyb_to_saldos_caja.saldo_valores -= op_cabecera_to_op_detalle.importe
			}
			else // es efectivo
			{
				op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.cuentas_cyb_to_saldos_caja.saldo_efectivo -= op_cabecera_to_op_detalle.importe
			}
		}
	} // cierra el for  de ////grabar cyb  por cada detalle  y cheques
	////grabar certificados de retenciones
	if (fPagoTerceros == 0 && op_cabecera_to_proveedor.extranjero != 1)
    {
	    var nombreForm = 'opago_1'
	    //  4=tipo_pago=Orden Pago a proveedores
		var estado = globals.retenciones_final(nombreForm,fecha,proveedor_id,fTotalPago,4,nro_comprobante,globals.greten[0],globals.greten[1],globals.greten[2]);
		if (estado == false)
		{	
			globals.DIALOGS.showWarningDialog('Error','Error en rutina final de retenciones','OK')
			return false;
		}
	}
	else
    {
    	globals.greten_ganan 	= 0	// Pago servicios a terceros - no retiene ganancias - pago a estac servicio x combustible fleteros
    	globals.greten_iva 		= 0
		globals.greten_ib		= 0
    }

    ////// grabar reten. ganancias 
    if (globals.greten_ganan != 0 && globals.greten_ganan != null)
    {
    	////// grabar reten. ganancias en op_retenciones
    	op_cabecera_to_op_retenciones.newRecord();
		op_cabecera_to_op_retenciones.retenciones_id = globals.gRetencionesGanancias
		if (op_cabecera_to_reten_certificados.gan_nro == null)
		{
			op_cabecera_to_reten_certificados.gan_nro = 0
		}
		op_cabecera_to_op_retenciones.certificado_nro 	= op_cabecera_to_reten_certificados.gan_nro
    	op_cabecera_to_op_retenciones.importe 			= globals.greten_ganan
    	////// grabar reten. ganancias en ctacte_pr
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.newRecord()      
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_mov 	= fecha
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.nro_factura	= op_cabecera_to_reten_certificados.gan_nro
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cod_mov		= 14 // fijo  
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.sucursal	= sucursal
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.letra		= letra  
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_vto	= null
		if (fTipoOrden == 1) //pago exacto 
			op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0;
		else
		{
			if (fTipoOrden == 2)
				op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = globals.greten_ganan;
			else
			{
				var $dif_saldo_reten = globals.greten_ganan - $dif_saldo
				if ($dif_saldo_reten < 0)
				{
					op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0
					$dif_saldo_reten = Math.abs($dif_saldo_reten)
				}
				else
				{
					op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = $dif_saldo_reten
					$dif_saldo_reten = 0
				}
			}
		}
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provincia_id 	= $provincia
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.importe			= globals.greten_ganan
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.neto			= globals.greten_ganan
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva				= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva_porc		= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cond_pago_id	= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.concepto 		= "Ret.Ganancias Certif. Nro.: " + utils.numberFormat(op_cabecera_to_reten_certificados.gan_nro,"###,##0") + ' Orden Pago Nro.: ' + nro_comprobante
    }

    ////// grabar reten. iva 
    if (globals.greten_iva != 0 && globals.greten_iva != null)
    {
    	////// grabar reten. iva en op_retenciones    	
    	op_cabecera_to_op_retenciones.newRecord();	
		op_cabecera_to_op_retenciones.retenciones_id = globals.gRetencionesIva
		if (op_cabecera_to_reten_certificados.iva_nro == null)
		{
			op_cabecera_to_reten_certificados.iva_nro = 0
		}
		op_cabecera_to_op_retenciones.certificado_nro 	= op_cabecera_to_reten_certificados.iva_nro
    	op_cabecera_to_op_retenciones.importe			= globals.greten_iva
    	////// grabar reten. iva en ctacte_pr
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.newRecord()      
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_mov		= fecha
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.nro_factura		= op_cabecera_to_reten_certificados.iva_nro
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cod_mov			= 13 // fijo  
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.sucursal		= sucursal
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.letra			= letra
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_vto		= null
		if (fTipoOrden == 1) //pago exacto 
			op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0;
		else
		{
			if (fTipoOrden == 2)
				op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = globals.greten_iva;
			else
			{
				var $dif_saldo_reten = globals.greten_iva - $dif_saldo
				if ($dif_saldo_reten < 0)
				{
					op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0
					$dif_saldo_reten = Math.abs($dif_saldo_reten)
				}
				else
				{
					op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = $dif_saldo_reten
					$dif_saldo_reten = 0
				}
			}
		} 	
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provincia_id 	= $provincia
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.importe			= globals.greten_iva
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.neto			= globals.greten_iva
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva				= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva_porc		= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cond_pago_id	= 0
		
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.concepto = "Ret.IVA Certif. Nro.: " + utils.numberFormat(op_cabecera_to_reten_certificados.iva_nro,"###,##0") + ' Orden Pago Nro.: ' + nro_comprobante
    }
    ////// grabar reten. Ing Brutos 
    if (globals.greten_ib != 0 && globals.greten_ib != null)
    {
    	////// grabar reten. IB en op_retenciones    	
    	op_cabecera_to_op_retenciones.newRecord();	
		op_cabecera_to_op_retenciones.retenciones_id = globals.gRetencionesIB
		if (op_cabecera_to_reten_certificados.ib_nro == null)
		{
			op_cabecera_to_reten_certificados.ib_nro = 0
		}
		op_cabecera_to_op_retenciones.certificado_nro 	= op_cabecera_to_reten_certificados.ib_nro
    	op_cabecera_to_op_retenciones.importe			= globals.greten_ib
    	////// grabar reten. IB en ctacte_pr
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.newRecord()      
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_mov		= fecha
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.nro_factura		= op_cabecera_to_reten_certificados.ib_nro
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cod_mov			= 19 // fijo  
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.sucursal		= sucursal
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.letra			= letra
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_vto		= null
		if (fTipoOrden == 1) //pago exacto 
			op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0;
		else
		{
			if (fTipoOrden == 2)
				op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = globals.greten_ib;
			else
			{
				var $dif_saldo_reten = globals.greten_ib - $dif_saldo
				if ($dif_saldo_reten < 0)
				{
					op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = 0
					$dif_saldo_reten = Math.abs($dif_saldo_reten)
				}
				else
				{
					op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo = $dif_saldo_reten
					$dif_saldo_reten = 0
				}
			}
		} 
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provincia_id 	= $provincia
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.importe			= globals.greten_ib
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.neto			= globals.greten_ib
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva				= 0 
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva_porc		= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cond_pago_id	= 0
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.concepto 		= "Ret.I. Brutos Certif. Nro.: " + utils.numberFormat(op_cabecera_to_reten_certificados.ib_nro,"###,##0") + ' Orden Pago Nro.: ' + nro_comprobante
    }
    
    databaseManager.startTransaction()
    var estado = databaseManager.saveData()
	if (estado == true)
	{
		databaseManager.commitTransaction()
		forms.opago_cabecera_imp_0.elements.tab_retenciones.removeAllTabs()
		if (op_cabecera_to_reten_certificados.getSize() > 0)
		{
			if (op_cabecera_to_reten_certificados.gan_nro)
			{
				forms.opago_cabecera_imp_0.elements.tab_retenciones.addTab(forms.reten_certificados_ganancias,'ret_ganancias','Ganancias','Retencion de Ganancias',null,null,null,'op_cabecera_to_reten_certificados')
			}
			if (op_cabecera_to_reten_certificados.iva_nro)
			{
				forms.opago_cabecera_imp_0.elements.tab_retenciones.addTab(forms.reten_certificados_iva,'ret_iva','IVA','Retencion de IVA',null,null,null,'op_cabecera_to_reten_certificados')
			}
			if (op_cabecera_to_reten_certificados.ib_nro)
			{
				forms.opago_cabecera_imp_0.elements.tab_retenciones.addTab(forms.reten_certificados_ib,'ret_ib','Ing. Brutos','Retencion de Ingresos Brutos',null,null,null,'op_cabecera_to_reten_certificados')
			}
			forms.opago_cabecera_imp_0.elements.tab_retenciones.visible = true
			forms.opago_cabecera_imp_0.elements.btn_imp_retencion.visible = true
		}
		globals.formEnVentana('opago_cabecera_imp_0','imp_op','Impresión')
	    Iniciar()  	
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso', 'Orden de Pago No fue generada' ,  "OK")
		cancelar()
	}
	return true
}

/**
 *
 * @properties={typeid:24,uuid:"D41DC1C4-2443-4F0E-A86F-67FE618E6654"}
 */
function eliminar_renglon() 
{
	var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja? ',  'Si', 'No')
	if (resp == 'Si')
	{
		op_cabecera_to_op_detalle.deleteRecord()
		forms.opago_2.tot_valores()
	}
	elements.confirmar.enabled = false;
}

/**
 * @properties={typeid:24,uuid:"EA92DB10-3699-41D1-AA68-77EAEBB6501E"}
 */
function totalizar() 
{
	forms.opago_2.tot_valores();
	forms.opago_3.tot_comprob();
	return true
}

/**
 *
 * @properties={typeid:24,uuid:"DC0CBCC1-198D-48C7-99B5-5E6D0F01D251"}
 */
function Iniciar() 
{
	databaseManager.setAutoSave(false);
	controller.newRecord(false);
	fecha 						= application.getServerTimeStamp();
	letra						= "X";     
	globals.gtotal_comprob		= 0;
	globals.gtotal_valores		= 0;
	globals.gtotal_saldo		= 0; 
	globals.gtotal_retenciones	= 0; 
	globals.gdiferencia			= 0; 
	globals.greten_ganan		= 0; 
	globals.greten_iva			= 0;
	globals.greten_ib			= 0;
	fTipoOrden					= 1;

	es_preview 			= 0; 
	fPagoTerceros 		= 0 
	globals.titulos_resumen(); 
	
	elements.confirmar.enabled				= false;  
	elements.fld_total_pago.enabled			= false; 
	elements.tab_comprobantes.enabled		= true;
	elements.btn_alta_comprob.enabled		= true;
	elements.btn_baja_comprob.enabled		= true;
	fTotalPago 				= 0;  
	globals.gtotal_neto_retencion 			= 0;
	f_neto_reten = 0;
}

/**
 * @properties={typeid:24,uuid:"27FCAD0E-7EFD-4DE6-A860-97B61FDCD168"}
 */
function agregar_renglon_comprob() 
{
	if(proveedor_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe informar Proveedor",'OK')
		elements.proveedor_id.requestFocus();
	}
	else
	{
		globals.formEnVentana('ctacte_pr_list_opago','ctacte_opago','Comprobantes a pagar')
	}
	elements.confirmar.enabled = false;
}

/**
 *
 * @properties={typeid:24,uuid:"5A9941BE-F75E-4967-9C33-1643D15B08FB"}
 */
function eliminar_renglon_comprob() 
{
	var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja? ',  'Si', 'No')
	if (resp == 'Si')
	{
		op_cabecera_to_op_detalle_comprob.op_detalle_comprob_to_ctacte_pr.marcado_ctacte = 0
		op_cabecera_to_op_detalle_comprob.deleteRecord()
		forms.opago_3.tot_comprob()
	}
	elements.confirmar.enabled = false;
}

/**
 * @properties={typeid:24,uuid:"DBCB79F6-3BFD-4663-97D1-380D463D123B"}
 */
function elige_proveedor() 
{
	globals.gtotal_saldo			= 0
	globals.gtotal_valores			= 0
	globals.gtotal_comprob			= 0
	globals.greten_ganan			= 0
	globals.greten_iva				= 0
	globals.greten_ib				= 0
	globals.gtotal_neto_retencion 	= 0
	globals.gtotal_retenciones 		= 0
	f_neto_reten 					= 0
	
	// salvar_proveedor: porque perdia en codigo de proveedor en el newRecord
	var salvar_proveedor = proveedor_id
	// rollback: porque al cambiar de proveedor dejaba los movs. del anterior
	databaseManager.revertEditedRecords()
	// newRecord: porque al traia datos de la ultima op de ese proveedor en vez de crear uno
	controller.newRecord(false);
	// perdia la fecha y letra seteadas en Iniciar() despues de newRecord
	fecha = application.getServerTimeStamp()
	letra = "X";
	proveedor_id = salvar_proveedor
	globals.marca_primer_find 	= 0
	globals.marca_primer_find_1 = 0
}

/**
 * @properties={typeid:24,uuid:"9CA9B6FE-B2CE-40D8-9994-0DF430421787"}
 */
function retencion_parcial() 
{
	if (proveedor_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe informar Proveedor', 'OK')
		elements.proveedor_id.requestFocus();
		return;
	}
	
	globals.greten_ib 			= 0
	globals.greten_ganan 		= 0
	globals.greten_iva 			= 0
	
	if (op_cabecera_to_proveedor.extranjero == 1)
	{
		f_neto_reten 				= 0
		globals.gtotal_retenciones 	= 0
		elements.confirmar.enabled 	= true;
		return
	}
	else
	{
		var $tot
		if (fTipoOrden == 1) //pago exacto
		{
			if (globals.gtotal_comprob == 0)
			{
				globals.DIALOGS.showWarningDialog('Aviso','Debe seleccionar comprobantes a imputar', 'OK')
				return;
			}
			$tot 			= globals.gtotal_comprob
			f_neto_reten 	= globals.gtotal_neto_retencion
		}
		else  // anticipo
		{
			if (fTipoOrden == 2) // Anticipo
			{
				if (fTotalPago == 0)
				{
					globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar el importe total del anticipo', 'OK')
					elements.fld_total_pago.requestFocus();
					return;
				}
				$tot 			= fTotalPago
				f_neto_reten 	= fTotalPago / ((100 + globals.greten_porc_iva_detraer) / 100)
			}
			else
			{
				if (fTotalPago == 0)
				{
					globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar el importe total del anticipo', 'OK')
					elements.fld_total_pago.requestFocus();
					return;
				}
				if (fTotalPago <= globals.gtotal_comprob)
				{
					globals.DIALOGS.showWarningDialog('Aviso','El importe total del pago debe ser mayor al total de comprobantes', 'OK')
					elements.fld_total_pago.requestFocus();
					return;
				}
				f_neto_reten = globals.gtotal_neto_retencion + ( (fTotalPago - globals.gtotal_comprob) / ((100 + globals.greten_porc_iva_detraer) /100))
			}
		}
	}

	globals.greten = globals.retenciones_previo(fecha, proveedor_id, f_neto_reten);
	if (globals.greten[0] == -1  || globals.greten[1] == -1) 
	{
		return;
	}
	
	globals.greten_ganan = 0
	if (fPagoTerceros == 0)
	{
		if (globals.greten[0] != 0){
			globals.greten_ganan 	= globals.greten[0][7] // elemento 0, 7 tiene el importe ret ganancias
			fPorcRetGanancias 		= globals.greten[0][4] // porcentaje de retencion
		}
	}
		
	if (globals.greten[1] != 0){
		globals.greten_iva 	= globals.greten[1][3] //  elemento 1,3 tiene el importe ret. ivaç
		fPorcRetIva 		= globals.greten[1][2] // porcentaje de retencion
	}
		
	if (globals.greten[2] != 0){
		globals.greten_ib 	= globals.greten[2][3] //  elemento 2,3 tiene el importe
		fPorcRetIIBB 		= globals.greten[2][2] // porcentaje de retencion
	}
	
	globals.gtotal_retenciones = globals.greten_ganan + globals.greten_iva + globals.greten_ib
	
	globals.opago_diferencia(fTipoOrden,fTotalPago)
	
	if (fTipoOrden == 3)
	{
		if (globals.gtotal_valores != 0 && globals.gtotal_comprob != 0)
			elements.confirmar.enabled = true;
		else
			elements.confirmar.enabled = false;
		return
	}
	if (globals.gtotal_valores != 0)  // ingreso valores 
	{
		var aux_compara = Math.abs ($tot - globals.gtotal_valores  - globals.greten_ganan - globals.greten_iva - globals.greten_ib)
		if (aux_compara > globals.zparam_opago_tolerancia)
		{
			globals.DIALOGS.showWarningDialog('Aviso','La diferencia entre el pago y los comprobantes no está dentro de la tolerancia','OK');
			elements.confirmar.enabled = false;
			return;
		}
		else
		{
			elements.confirmar.enabled = true;
		}
	}
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"766CC842-6DB3-48A0-AC43-7E688281E792"}
 */
function validar_importe_anticipo(oldValue, newValue, event)
{
	elements.confirmar.enabled = false
	f_neto_reten = 0;
	retencion_parcial();
	return true
}

/**
 *
 * @properties={typeid:24,uuid:"B6D3505E-ED70-4583-9CB2-8B43789DACC9"}
 */
function validar_fecha_pago() 
{
	var $cant = op_cabecera_to_op_detalle.getSize()
	for (var i = 1 ; i <= $cant ; i++)
	{
	//// recorrer cheques    
		var $rcd = op_cabecera_to_op_detalle.getRecord(i)
		if ($rcd.cuentas_cyb_id == null)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar cuenta de banco','OK')
			return false;
		}
		if ($rcd.op_detalle_to_valores.es_cheque == 1)	
		{// es cheque
			if ($rcd.op_detalle_to_valores.es_propio == 1)	
			{// es propio	
				if ($rcd.fecha_pago == null || $rcd.dias_pago == null)
				{ 
					if ($rcd.op_detalle_to_valores.es_ch_difer != 1)// no es diferido
						$rcd.fecha_pago = application.getServerTimeStamp();	
					else
					{
						globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar días / fecha de pago para cheque diferido nro. ' + $rcd.cheque_nro,'OK')
						return false;
					}
				}
			}
			if ($rcd.cheque_nro == null)
			{
				globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar nro. de cheque','OK')
				return false;
			}
		}
		else
		{
			if ($rcd.op_detalle_to_valores.es_tarjeta == 1)
			{
				$rcd.fecha_pago = $rcd.fecha_emision_chq
				if ($rcd.cheque_nro == null)
				{
					globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar nro. de cupón','OK')
					return false;
				}
			}
			if($rcd.op_detalle_to_valores.usa_cta_bco == 1)
			{ // es transferencia
				if ($rcd.cheque_nro == null)
				{
					globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar nro. de transferencia','OK')
					return false;
				}	
				if ($rcd.fecha_emision_chq == null)
				{
					globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar fecha de transferencia','OK')
					return false;
				}
			}
		}
	}
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"8F48D486-A4DC-4B67-99E2-8A7035D02891"}
 */
function onDataChange_fecha(oldValue, newValue, event) 
{
	var $hoy = application.getServerTimeStamp()
	var $cant = globals.diferenciaDias(newValue,$hoy)
	if ($cant > globals.zparam_proveedores_dias_tolerancia)
	{
		globals.DIALOGS.showWarningDialog('Aviso','La fecha está fuera del período de tolerancia','OK')
	}
	if (newValue > $hoy)
	{
		globals.DIALOGS.showWarningDialog('Aviso','La fecha es mayor a la fecha del día','OK')
	}
	if (newValue.getMonth() != $hoy.getMonth() || newValue.getFullYear() != $hoy.getFullYear())
	{
		globals.DIALOGS.showWarningDialog('Aviso','La fecha está fuera del mes actual','OK')
	}
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"81BC927F-787D-4B2A-A02A-FED35C6C70CE"}
 */
function onDataChange_pago_terceros(oldValue, newValue, event) {
	elige_proveedor(); // hace lo mismo que si cambia proveedor
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"783491C2-8FCF-4985-BE15-C5BFA6DC4526"}
 */
function onDataChange_porc_iva(oldValue, newValue, event) 
{
	f_neto_reten =  fTotalPago / ((100 + globals.greten_porc_iva_detraer) / 100)
	// este es el cambio del porcentaje de IVA a detraer del total del pago para calcular el imponible
	retencion_parcial();
	return true
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"592D8198-2ECB-47E5-A868-F45CCE23A857"}
 */
function onDataChange_neto_reten(oldValue, newValue, event)
{
	if (es_anticipo == 0)  // pago normal = NO cambiar neto retencion
	{
		globals.DIALOGS.showWarningDialog('Aviso','No puede cambiar Neto de retencion en un pago exacto','OK')
		f_neto_reten = oldValue
		return false;
	}
	if (f_neto_reten > fTotalPago)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Neto de retención debe ser menor que el Importe Total del Anticipo','OK')
		return true;
	}
	retencion_parcial();
	return true
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"A7667FF3-B6A4-4CE9-AEF7-561F7256310F"}
 */
function onDataChangeTipoOrden(oldValue, newValue, event) {
	if (fTipoOrden == 1)  // pago exacto
	{
		elements.tab_comprobantes.enabled		= true;
		elements.btn_alta_comprob.enabled		= true;
		elements.btn_baja_comprob.enabled		= true;
		elements.fld_total_pago.enabled			= false;
		f_neto_reten = 0
	}
	else  // es anticipo
	{
		if (fTipoOrden == 2)
		{
			elements.tab_comprobantes.enabled		= false;
			elements.btn_alta_comprob.enabled		= false;
			elements.btn_baja_comprob.enabled		= false;
			elements.fld_total_pago.enabled			= true;
			globals.gtotal_comprob					= 0;
			var $cant = databaseManager.getFoundSetCount(op_cabecera_to_op_detalle_comprob)
			for (var i = 1 ; i <= $cant ; i++)
			{
				var $dtl = op_cabecera_to_op_detalle_comprob.getRecord(i)
				$dtl.op_detalle_comprob_to_ctacte_pr.marcado_ctacte = 0
			}
			op_cabecera_to_op_detalle_comprob.deleteAllRecords(); // si es anticipo no debe tener comprobantes
			globals.gtotal_neto_retencion			= 0
			f_neto_reten = 0
			elements.fld_total_pago.requestFocus();
		}
		else
		{
			elements.tab_comprobantes.enabled		= true;
			elements.btn_alta_comprob.enabled		= true;
			elements.btn_baja_comprob.enabled		= true;
			elements.fld_total_pago.enabled			= true;
			elements.fld_total_pago.requestFocus();
		}
	}
	fTotalPago 	= 0;
	globals.greten_ganan		= 0;
	globals.greten_iva			= 0;
	globals.greten_ib			= 0;
	globals.gtotal_retenciones	= 0;
	globals.opago_diferencia(fTipoOrden,fTotalPago);
	return true
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"276FC581-B829-4331-8F13-A1EDDC061687"}
 */
function calcularDiferencia(event) {
	globals.opago_diferencia(fTipoOrden,fTotalPago)
}
